home *** CD-ROM | disk | FTP | other *** search
/ Windows Game Programming for Dummies (2nd Edition) / WinGamProgFD.iso / pc / DirectX SDK / DXSDK / samples / Multimedia / DirectShow_WinXP / VMR / VMRXcl / Utils.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2001-10-08  |  19.0 KB  |  562 lines

  1. //----------------------------------------------------------------------------
  2. //  File:   Utils.h
  3. //
  4. //  Desc:   DirectShow sample code
  5. //          External (global) utilities specific for VMRXcl app
  6. //
  7. //  Copyright (c) 2000-2001 Microsoft Corporation. All rights reserved.
  8. //----------------------------------------------------------------------------
  9. #include "project.h"
  10. #include "utils.h"
  11.  
  12. //-----------------------------------------------------------------------------------------
  13. //  Function:   hresultNameLookup
  14. //  Purpose:    returns a string value for the given hresult
  15. //  Arguments:  HRESULT that needs verifying
  16. //  Returns:    string
  17. //-----------------------------------------------------------------------------------------*/
  18. const char * hresultNameLookup(HRESULT hres)
  19. {
  20.     switch(hres)
  21.     {
  22.     case VFW_E_CANNOT_RENDER:
  23.         return "VFW_E_CANNOT_RENDER";
  24.         break;
  25.     case VFW_E_INVALID_FILE_FORMAT:
  26.         return "VFW_E_INVALID_FILE_FORMAT";
  27.         break;
  28.     case VFW_E_NOT_FOUND:
  29.         return "VFW_E_NOT_FOUND";
  30.         break;
  31.     case VFW_E_NOT_IN_GRAPH:
  32.         return "VFW_E_NOT_IN_GRAPH";
  33.         break;
  34.     case VFW_E_UNKNOWN_FILE_TYPE:
  35.         return "VFW_E_UNKNOWN_FILE_TYPE";
  36.         break;
  37.     case VFW_E_UNSUPPORTED_STREAM:
  38.         return "VFW_E_UNSUPPORTED_STREAM";
  39.         break;
  40.     case VFW_E_CANNOT_CONNECT:
  41.         return "VFW_E_CANNOT_CONNECT";
  42.         break;
  43.     case VFW_E_CANNOT_LOAD_SOURCE_FILTER:
  44.         return "VFW_E_CANNOT_LOAD_SOURCE_FILTER";
  45.         break;
  46.     case VFW_S_PARTIAL_RENDER:
  47.         return "VFW_S_PARTIAL_RENDER";
  48.         break;
  49.     case VFW_S_VIDEO_NOT_RENDERED:
  50.         return "VFW_S_VIDEO_NOT_RENDERED";
  51.         break;
  52.     case VFW_S_AUDIO_NOT_RENDERED:
  53.         return "VFW_S_AUDIO_NOT_RENDERED";
  54.         break;
  55.     case VFW_S_DUPLICATE_NAME:
  56.         return "VFW_S_DUPLICATE_NAME";
  57.         break;
  58.     case VFW_S_MEDIA_TYPE_IGNORED:
  59.         return "VFW_S_MEDIA_TYPE_IGNORED";
  60.         break;
  61.     case E_INVALIDARG:
  62.         return "E_INVALIDARG";
  63.         break;
  64.     case DDERR_INCOMPATIBLEPRIMARY:
  65.         return "DDERR_INCOMPATIBLEPRIMARY";
  66.         break;
  67.     case DDERR_INVALIDCAPS:
  68.         return "DDERR_INVALIDCAPS";
  69.         break;
  70.     case DDERR_INVALIDOBJECT :
  71.         return "DDERR_INVALIDOBJECT";
  72.         break;
  73.     case DDERR_INVALIDPIXELFORMAT:
  74.         return "DDERR_INVALIDPIXELFORMAT";
  75.         break;
  76.     case DDERR_NOALPHAHW :
  77.         return "DDERR_NOALPHAHW";
  78.         break;
  79.     case DDERR_NOCOOPERATIVELEVELSET :
  80.         return "DDERR_NOCOOPERATIVELEVELSET";
  81.         break;
  82.     case DDERR_NODIRECTDRAWHW :
  83.         return "DDERR_NODIRECTDRAWHW";
  84.         break;
  85.     case DDERR_NOEMULATION :
  86.         return "DDERR_NOEMULATION";
  87.         break;
  88.     case VFW_E_BUFFERS_OUTSTANDING:
  89.         return "VFW_E_BUFFERS_OUTSTANDING";
  90.         break;
  91.     case DDERR_NOEXCLUSIVEMODE :
  92.         return "DDERR_NOEXCLUSIVEMODE ";
  93.         break;
  94.     case DDERR_NOFLIPHW:
  95.         return "DDERR_NOFLIPHW";
  96.         break;
  97.     case DDERR_NOMIPMAPHW:
  98.         return "DDERR_NOMIPMAPHW";
  99.         break;
  100.     case DDERR_NOOVERLAYHW :
  101.         return "DDERR_NOOVERLAYHW ";
  102.         break;
  103.     case E_OUTOFMEMORY:
  104.         return "E_OUTOFMEMORY";
  105.         break;
  106.     case VFW_E_NO_DISPLAY_PALETTE:
  107.         return "VFW_E_NO_DISPLAY_PALETTE";
  108.         break;
  109.     case VFW_E_NO_COLOR_KEY_FOUND:
  110.         return "VFW_E_NO_COLOR_KEY_FOUND";
  111.         break;
  112.     case VFW_E_PALETTE_SET:
  113.         return "VFW_E_PALETTE_SET";
  114.         break;
  115.     case DDERR_NOZBUFFERHW :
  116.         return "DDERR_NOZBUFFERHW ";
  117.         break;
  118.     case DDERR_OUTOFVIDEOMEMORY :
  119.         return "DDERR_OUTOFVIDEOMEMORY";
  120.         break;
  121.     case DDERR_PRIMARYSURFACEALREADYEXISTS:
  122.         return "DDERR_PRIMARYSURFACEALREADYEXISTS ";
  123.         break;
  124.     case DDERR_UNSUPPORTEDMODE:
  125.         return "DDERR_UNSUPPORTEDMODE";
  126.         break;
  127.     case VFW_E_NO_ADVISE_SET:
  128.         return "VFW_E_NO_ADVISE_SET";
  129.         break;
  130.     case S_OK:
  131.         return "S_OK";
  132.         break;
  133.     case S_FALSE:
  134.         return "S_FALSE";
  135.         break;
  136.     case VFW_S_CONNECTIONS_DEFERRED:
  137.         return "VFW_S_CONNECTIONS_DEFERRED";
  138.         break;
  139.     case 0x80040154:
  140.         return "Class not registered";
  141.         break;
  142.     case E_FAIL:
  143.         return "E_FAIL";
  144.         break;
  145.     case VFW_E_DVD_OPERATION_INHIBITED:
  146.         return "VFW_E_DVD_OPERATION_INHIBITED";
  147.         break;
  148.     case VFW_E_DVD_INVALIDDOMAIN:
  149.         return "VFW_E_DVD_INVALIDDOMAIN";
  150.         break;
  151.     case E_NOTIMPL:
  152.         return "E_NOTIMPL";
  153.         break;
  154.     case VFW_E_WRONG_STATE:
  155.         return "VFW_E_WRONG_STATE";
  156.         break;
  157.     case E_PROP_SET_UNSUPPORTED:
  158.         return "E_PROP_SET_UNSUPPORTED";
  159.         break;
  160.     case VFW_E_NO_PALETTE_AVAILABLE:
  161.         return "VFW_E_NO_PALETTE_AVAILABLE";
  162.         break;
  163.     case E_UNEXPECTED:
  164.         return "E_UNEXPECTED";
  165.         break;
  166.     case VFW_E_DVD_NO_BUTTON:
  167.         return "VFW_E_DVD_NO_BUTTON";
  168.         break;
  169.     case VFW_E_DVD_GRAPHNOTREADY:
  170.         return "VFW_E_DVD_GRAPHNOTREADY";
  171.         break;
  172.     case VFW_E_NOT_OVERLAY_CONNECTION:
  173.         return "VFW_E_NOT_OVERLAY_CONNECTION";
  174.         break;
  175.     case VFW_E_DVD_RENDERFAIL:
  176.         return "VFW_E_DVD_RENDERFAIL";
  177.         break;
  178.     case VFW_E_NOT_CONNECTED:
  179.         return "VFW_E_NOT_CONNECTED";
  180.         break;
  181.     case E_NOINTERFACE:
  182.         return "E_NOINTERFACE";
  183.         break;
  184.     case VFW_E_NO_COLOR_KEY_SET :
  185.         return "VFW_E_NO_COLOR_KEY_SET ";
  186.         break;
  187.     case VFW_E_NO_INTERFACE:
  188.         return "VFW_E_NO_INTERFACE";
  189.         break;
  190.     case 0x8004020c:
  191.         return "VFW_E_BUFFER_NOTSET";
  192.         break;
  193.     case 0x80040225:
  194.         return "VFW_E_NOT_PAUSED";
  195.     case 0x80070002:
  196.         return "System cannot find the file specified";
  197.         break;
  198.     case 0x80070003:
  199.         return "System cannot find the path specified";
  200.         break;
  201.     case VFW_E_DVD_DECNOTENOUGH:
  202.         return "VFW_E_DVD_DECNOTENOUGH";
  203.         break;
  204.     case VFW_E_ADVISE_ALREADY_SET:
  205.         return "VFW_E_ADVISE_ALREADY_SET";
  206.         break;
  207.     case VFW_E_DVD_CMD_CANCELLED:
  208.         return "VFW_E_DVD_CMD_CANCELLED";
  209.         break;
  210.     case VFW_E_DVD_MENU_DOES_NOT_EXIST:
  211.         return "VFW_E_DVD_MENU_DOES_NOT_EXIST";
  212.         break;
  213.     case VFW_E_DVD_WRONG_SPEED:
  214.         return "VFW_E_DVD_WRONG_SPEED";
  215.         break;
  216.     case VFW_S_DVD_NON_ONE_SEQUENTIAL:
  217.         return "VFW_S_DVD_NON_ONE_SEQUENTIAL";
  218.         break;
  219.     case E_POINTER:
  220.         return "E_POINTER";
  221.         break;
  222.     case VFW_E_DVD_NOT_IN_KARAOKE_MODE:
  223.         return "VFW_E_DVD_NOT_IN_KARAOKE_MODE";
  224.         break;
  225.     case VFW_E_DVD_INVALID_DISC:
  226.         return "VFW_E_DVD_INVALID_DISC";
  227.         break;
  228.     case VFW_E_DVD_STREAM_DISABLED:
  229.         return "VFW_E_DVD_STREAM_DISABLED";
  230.         break;
  231.     case VFW_E_NOT_STOPPED:
  232.         return "VFW_E_NOT_STOPPED";
  233.         break;
  234.     default:        
  235.         return "Unrecognized";
  236.         break;
  237.     }
  238. }
  239.  
  240.     
  241. /*-----------------------------------------------------------------------------------------
  242. |   Function:   MySleep
  243. |   Purpose:    if the application is in automated mode, then sleep func is turned off
  244. |   Arguments:  checks m_bAutomatedStatus to see if the func is in automation
  245. |   Returns:    true if automated, false otherwist
  246. \-----------------------------------------------------------------------------------------*/
  247.      
  248. bool MySleep(DWORD  dwTime)
  249. {
  250.     HANDLE hNeverHappensEvent;
  251.     hNeverHappensEvent = CreateEvent(NULL, FALSE, FALSE, "EVENTTHATNEVERHAPPENS");
  252.     WaitForSingleObject( hNeverHappensEvent, dwTime);
  253.     return false;
  254.  
  255. } // end of checkHResult method
  256.  
  257.  
  258. void ReportDDrawSurfDesc( DDSURFACEDESC2 ddsd)
  259. {
  260.     char szFlags[4096];
  261.     char szMsg[4096];
  262.  
  263.     OutputDebugString("*** Surface description ***\n");
  264.     
  265.     SurfaceDescHelper( ddsd.dwFlags, szFlags);
  266.     OutputDebugString(szFlags);
  267.  
  268.     sprintf( szMsg, "  dwWidth x dwHeight: %ld x %ld\n", ddsd.dwWidth, ddsd.dwHeight);
  269.     OutputDebugString(szMsg);
  270.  
  271.     sprintf( szMsg, "  lPitch: %ld\n", ddsd.lPitch);
  272.     OutputDebugString(szMsg);
  273.     OutputDebugString("  (dwLinearSize)\n");
  274.  
  275.     sprintf( szMsg, "  dwBackBufferCount: %ld\n", ddsd.dwBackBufferCount);
  276.     OutputDebugString(szMsg);
  277.  
  278.     sprintf( szMsg, "  dwMipMapCount: %ld\n", ddsd.dwMipMapCount);
  279.     OutputDebugString(szMsg);
  280.     OutputDebugString("  (dwRefreshRate)");
  281.  
  282.     sprintf( szMsg, "  dwAlphaBitDepth: %ld\n", (LONG)ddsd.dwAlphaBitDepth);
  283.     OutputDebugString(szMsg);
  284.  
  285.     sprintf( szMsg, "  lpSurface: %x\n", (LONG_PTR)(ddsd.lpSurface));
  286.     OutputDebugString(szMsg);
  287.  
  288.     ReportPixelFormat( ddsd.ddpfPixelFormat );
  289.     ReportDDSCAPS2( ddsd.ddsCaps );
  290.  
  291.     sprintf( szMsg, "  dwTextureStage: %ld\n", ddsd.dwTextureStage);
  292.     OutputDebugString(szMsg);
  293.  
  294.     OutputDebugString("***************************\n");
  295. }
  296.  
  297. void ReportDDSCAPS2( DDSCAPS2 ddscaps )
  298. {
  299.     char sz[4096];
  300.  
  301.     strcpy( sz, "  DDSCAPS2::dwCaps: ");
  302.     if( ddscaps.dwCaps & DDSCAPS_3DDEVICE ) strcat( sz, "DDSCAPS_3DDEVICE, ");
  303.     if( ddscaps.dwCaps & DDSCAPS_ALLOCONLOAD ) strcat( sz, "DDSCAPS_ALLOCONLOAD, ");
  304.     if( ddscaps.dwCaps & DDSCAPS_ALPHA ) strcat( sz, "DDSCAPS_ALPHA, ");
  305.     if( ddscaps.dwCaps & DDSCAPS_BACKBUFFER ) strcat( sz, "DDSCAPS_BACKBUFFER, ");
  306.     if( ddscaps.dwCaps & DDSCAPS_COMPLEX ) strcat( sz, "DDSCAPS_COMPLEX, ");
  307.     if( ddscaps.dwCaps & DDSCAPS_FLIP ) strcat( sz, "DDSCAPS_FLIP, ");
  308.     if( ddscaps.dwCaps & DDSCAPS_FRONTBUFFER ) strcat( sz, "DDSCAPS_FRONTBUFFER, ");
  309.     if( ddscaps.dwCaps & DDSCAPS_HWCODEC ) strcat( sz, "DDSCAPS_HWCODEC, ");
  310.     if( ddscaps.dwCaps & DDSCAPS_LIVEVIDEO ) strcat( sz, "DDSCAPS_LIVEVIDEO, ");
  311.     if( ddscaps.dwCaps & DDSCAPS_LOCALVIDMEM ) strcat( sz, "DDSCAPS_LOCALVIDMEM, ");
  312.     if( ddscaps.dwCaps & DDSCAPS_MIPMAP ) strcat( sz, "DDSCAPS_MIPMAP, ");
  313.     if( ddscaps.dwCaps & DDSCAPS_MODEX ) strcat( sz, "DDSCAPS_MODEX, ");
  314.     if( ddscaps.dwCaps & DDSCAPS_NONLOCALVIDMEM ) strcat( sz, "DDSCAPS_NONLOCALVIDMEM, ");
  315.     if( ddscaps.dwCaps & DDSCAPS_OFFSCREENPLAIN ) strcat( sz, "DDSCAPS_OFFSCREENPLAIN, ");
  316.     if( ddscaps.dwCaps & DDSCAPS_OPTIMIZED ) strcat( sz, "DDSCAPS_OPTIMIZED, ");
  317.     if( ddscaps.dwCaps & DDSCAPS_OVERLAY ) strcat( sz, "DDSCAPS_OVERLAY, ");
  318.     if( ddscaps.dwCaps & DDSCAPS_OWNDC ) strcat( sz, "DDSCAPS_OWNDC, ");
  319.     if( ddscaps.dwCaps & DDSCAPS_PALETTE ) strcat( sz, "DDSCAPS_PALETTE, ");
  320.     if( ddscaps.dwCaps & DDSCAPS_PRIMARYSURFACE ) strcat( sz, "DDSCAPS_PRIMARYSURFACE, ");
  321.     if( ddscaps.dwCaps & DDSCAPS_STANDARDVGAMODE ) strcat( sz, "DDSCAPS_STANDARDVGAMODE, ");
  322.     if( ddscaps.dwCaps & DDSCAPS_SYSTEMMEMORY ) strcat( sz, "DDSCAPS_SYSTEMMEMORY, ");
  323.     if( ddscaps.dwCaps & DDSCAPS_TEXTURE ) strcat( sz, "DDSCAPS_TEXTURE, ");
  324.     if( ddscaps.dwCaps & DDSCAPS_VIDEOMEMORY ) strcat( sz, "DDSCAPS_VIDEOMEMORY, ");
  325.     if( ddscaps.dwCaps & DDSCAPS_VIDEOPORT ) strcat( sz, "DDSCAPS_VIDEOPORT, ");
  326.     if( ddscaps.dwCaps & DDSCAPS_VISIBLE ) strcat( sz, "DDSCAPS_VISIBLE, ");
  327.     if( ddscaps.dwCaps & DDSCAPS_WRITEONLY ) strcat( sz, "DDSCAPS_WRITEONLY, ");
  328.     if( ddscaps.dwCaps & DDSCAPS_ZBUFFER ) strcat( sz, "DDSCAPS_ZBUFFER, ");
  329.  
  330.     strcat( sz, "\n");
  331.     OutputDebugString(sz);
  332.     strcpy( sz, "  DDSCAPS2::dwCaps2: ");
  333.  
  334.     if( ddscaps.dwCaps2 & DDSCAPS2_CUBEMAP ) strcat( sz, "DDSCAPS2_CUBEMAP, ");
  335.     if( ddscaps.dwCaps2 & DDSCAPS2_CUBEMAP_POSITIVEX ) strcat( sz, "DDSCAPS2_CUBEMAP_POSITIVEX, ");
  336.     if( ddscaps.dwCaps2 & DDSCAPS2_CUBEMAP_NEGATIVEX ) strcat( sz, "DDSCAPS2_CUBEMAP_NEGATIVEX, ");
  337.     if( ddscaps.dwCaps2 & DDSCAPS2_CUBEMAP_POSITIVEY ) strcat( sz, "DDSCAPS2_CUBEMAP_POSITIVEY, ");
  338.     if( ddscaps.dwCaps2 & DDSCAPS2_CUBEMAP_NEGATIVEY ) strcat( sz, "DDSCAPS2_CUBEMAP_NEGATIVEY, ");
  339.     if( ddscaps.dwCaps2 & DDSCAPS2_CUBEMAP_POSITIVEZ ) strcat( sz, "DDSCAPS2_CUBEMAP_POSITIVEZ, ");
  340.     if( ddscaps.dwCaps2 & DDSCAPS2_CUBEMAP_NEGATIVEZ ) strcat( sz, "DDSCAPS2_CUBEMAP_NEGATIVEZ, ");
  341.     if( ddscaps.dwCaps2 & DDSCAPS2_CUBEMAP_ALLFACES ) strcat( sz, "DDSCAPS2_CUBEMAP_ALLFACES, ");
  342.     if( ddscaps.dwCaps2 & DDSCAPS2_D3DTEXTUREMANAGE ) strcat( sz, "DDSCAPS2_D3DTEXTUREMANAGE, ");
  343.     if( ddscaps.dwCaps2 & DDSCAPS2_DONOTPERSIST ) strcat( sz, "DDSCAPS2_DONOTPERSIST, ");
  344.     if( ddscaps.dwCaps2 & DDSCAPS2_HARDWAREDEINTERLACE ) strcat( sz, "DDSCAPS2_HARDWAREDEINTERLACE, ");
  345.     if( ddscaps.dwCaps2 & DDSCAPS2_HINTANTIALIASING ) strcat( sz, "DDSCAPS2_HINTANTIALIASING, ");
  346.     if( ddscaps.dwCaps2 & DDSCAPS2_HINTDYNAMIC ) strcat( sz, "DDSCAPS2_HINTDYNAMIC, ");
  347.     if( ddscaps.dwCaps2 & DDSCAPS2_HINTSTATIC ) strcat( sz, "DDSCAPS2_HINTSTATIC, ");
  348.     if( ddscaps.dwCaps2 & DDSCAPS2_MIPMAPSUBLEVEL ) strcat( sz, "DDSCAPS2_MIPMAPSUBLEVEL, ");
  349.     if( ddscaps.dwCaps2 & DDSCAPS2_OPAQUE ) strcat( sz, "DDSCAPS2_OPAQUE, ");
  350.     if( ddscaps.dwCaps2 & DDSCAPS2_STEREOSURFACELEFT ) strcat( sz, "DDSCAPS2_STEREOSURFACELEFT, ");
  351.     if( ddscaps.dwCaps2 & DDSCAPS2_TEXTUREMANAGE ) strcat( sz, "DDSCAPS2_TEXTUREMANAGE, ");
  352.     
  353.     strcat( sz, "\n");
  354.     OutputDebugString(sz);
  355. }
  356.  
  357.  
  358. void ReportPixelFormat( DDPIXELFORMAT ddpf)
  359. {
  360.     char szFlags[4096];
  361.     char szMsg[MAX_PATH];
  362.  
  363.     PixelFormatHelper( ddpf.dwFlags, szFlags);
  364.  
  365.     OutputDebugString(szFlags);
  366.  
  367.     sprintf( szMsg, "    dwFourCC: %ld\n", ddpf.dwFourCC);
  368.     OutputDebugString(szMsg);
  369.  
  370.     sprintf( szMsg, "    dwRGBBitCount: %ld\n", ddpf.dwRGBBitCount);
  371.     OutputDebugString(szMsg);
  372.     OutputDebugString("    (dwYUVBitCount, dwZBufferBitDepth, dwAlphaBitDepth, dwLuminanceBitCount, dwBumpBitCount)\n");
  373.  
  374.     sprintf( szMsg, "    dwRBitMask: %ld\n", ddpf.dwRBitMask);
  375.     OutputDebugString(szMsg);
  376.     OutputDebugString("    (dwYBitMask, dwStencilBitDepth, dwLuminanceBitMask, dwBumpDuBitMask)\n");
  377.  
  378.     sprintf( szMsg, "    dwGBitMask: %ld\n", ddpf.dwGBitMask);
  379.     OutputDebugString(szMsg);
  380.     OutputDebugString("    (dwUBitMask, dwZBitMask, dwBumpDvBitMask)\n");
  381.  
  382.     sprintf( szMsg, "    dwBBitMask: %ld\n", ddpf.dwBBitMask);
  383.     OutputDebugString(szMsg);
  384.     OutputDebugString("    (dwVBitMask, dwStencilBitMask, dwBumpLuminanceBitMask)\n");
  385.  
  386.     sprintf( szMsg, "    dwRGBAlphaBitMask: %ld\n", ddpf.dwRGBAlphaBitMask);
  387.     OutputDebugString(szMsg);
  388.     OutputDebugString("    (dwYUVAlphaBitMask, dwLuminanceAlphaBitMask, dwRGBZBitMask, dwYUVZBitMask)\n");
  389. }
  390.  
  391. void SurfaceDescHelper( DWORD dwFlags, char * pszFlags )
  392. {
  393.     if( !pszFlags )
  394.     {
  395.         return;
  396.     }
  397.     strcpy( pszFlags, "  dwFlags: ");
  398.  
  399.     if( dwFlags & DDSD_ALL )
  400.         strcat( pszFlags, "DDSD_ALL\n");
  401.  
  402.     if( dwFlags & DDSD_ALPHABITDEPTH  )
  403.         strcat( pszFlags, "DDSD_ALPHABITDEPTH\n");
  404.  
  405.     if( dwFlags & DDSD_BACKBUFFERCOUNT  )
  406.         strcat( pszFlags, "DDSD_BACKBUFFERCOUNT\n");
  407.  
  408.     if( dwFlags & DDSD_CAPS  )
  409.         strcat( pszFlags, "DDSD_CAPS\n");
  410.  
  411.     if( dwFlags & DDSD_CKDESTBLT   )
  412.         strcat( pszFlags, "DDSD_CKDESTBLT\n");
  413.  
  414.     if( dwFlags & DDSD_CKDESTOVERLAY   )
  415.         strcat( pszFlags, "DDSD_CKDESTOVERLAY\n");
  416.  
  417.     if( dwFlags & DDSD_CKSRCBLT   )
  418.         strcat( pszFlags, "DDSD_CKSRCBLT\n");
  419.  
  420.     if( dwFlags & DDSD_CKSRCOVERLAY    )
  421.         strcat( pszFlags, "DDSD_CKSRCOVERLAY\n");
  422.  
  423.     if( dwFlags & DDSD_HEIGHT    )
  424.         strcat( pszFlags, "DDSD_HEIGHT\n");
  425.  
  426.     if( dwFlags & DDSD_LINEARSIZE    )
  427.         strcat( pszFlags, "DDSD_LINEARSIZE\n");
  428.  
  429.     if( dwFlags & DDSD_LPSURFACE    )
  430.         strcat( pszFlags, "DDSD_LPSURFACE\n");
  431.  
  432.     if( dwFlags & DDSD_MIPMAPCOUNT     )
  433.         strcat( pszFlags, "DDSD_MIPMAPCOUNT\n");
  434.  
  435.     if( dwFlags & DDSD_PITCH     )
  436.         strcat( pszFlags, "DDSD_PITCH\n");
  437.  
  438.     if( dwFlags & DDSD_PIXELFORMAT     )
  439.         strcat( pszFlags, "DDSD_PIXELFORMAT\n");
  440.  
  441.     if( dwFlags & DDSD_REFRESHRATE     )
  442.         strcat( pszFlags, "DDSD_REFRESHRATE\n");
  443.  
  444.     if( dwFlags & DDSD_TEXTURESTAGE      )
  445.         strcat( pszFlags, "DDSD_TEXTURESTAGE\n");
  446.  
  447.     if( dwFlags & DDSD_WIDTH      )
  448.         strcat( pszFlags, "DDSD_WIDTH\n");
  449.  
  450.     strcat(pszFlags, "\n");
  451. }
  452.  
  453.  
  454. void PixelFormatHelper( DWORD dwFlags, char * pszFlags)
  455. {
  456.     if( !pszFlags )
  457.     {
  458.         return;
  459.     }
  460.  
  461.     strcpy( pszFlags, "    dwFlags: ");
  462.  
  463.     if( dwFlags & DDPF_ALPHA )
  464.         strcat( pszFlags, "DDPF_ALPHA, ");
  465.  
  466.     if( dwFlags & DDPF_ALPHAPIXELS  )
  467.         strcat( pszFlags, "DDPF_ALPHAPIXELS, ");
  468.  
  469.     if( dwFlags & DDPF_ALPHAPREMULT  )
  470.         strcat( pszFlags, "DDPF_ALPHAPREMULT, ");
  471.  
  472.     if( dwFlags & DDPF_BUMPLUMINANCE  )
  473.         strcat( pszFlags, "DDPF_BUMPLUMINANCE, ");
  474.  
  475.     if( dwFlags & DDPF_BUMPDUDV   )
  476.         strcat( pszFlags, "DDPF_BUMPDUDV, ");
  477.  
  478.     if( dwFlags & DDPF_COMPRESSED   )
  479.         strcat( pszFlags, "DDPF_COMPRESSED, ");
  480.  
  481.     if( dwFlags & DDPF_FOURCC   )
  482.         strcat( pszFlags, "DDPF_FOURCC, ");
  483.  
  484.     if( dwFlags & DDPF_LUMINANCE    )
  485.         strcat( pszFlags, "DDPF_LUMINANCE, ");
  486.  
  487.     if( dwFlags & DDPF_PALETTEINDEXED1    )
  488.         strcat( pszFlags, "DDPF_PALETTEINDEXED1, ");
  489.  
  490.     if( dwFlags & DDPF_PALETTEINDEXED2    )
  491.         strcat( pszFlags, "DDPF_PALETTEINDEXED2, ");
  492.  
  493.     if( dwFlags & DDPF_PALETTEINDEXED4    )
  494.         strcat( pszFlags, "DDPF_PALETTEINDEXED4, ");
  495.  
  496.     if( dwFlags & DDPF_PALETTEINDEXED8    )
  497.         strcat( pszFlags, "DDPF_PALETTEINDEXED8, ");
  498.  
  499.     if( dwFlags & DDPF_PALETTEINDEXEDTO8  )
  500.         strcat( pszFlags, "DDPF_PALETTEINDEXEDTO8, ");
  501.     
  502.     if( dwFlags & DDPF_RGB   )
  503.         strcat( pszFlags, "DDPF_RGB, ");
  504.  
  505.     if( dwFlags & DDPF_RGBTOYUV    )
  506.         strcat( pszFlags, "DDPF_RGBTOYUV, ");
  507.  
  508.     if( dwFlags & DDPF_STENCILBUFFER     )
  509.         strcat( pszFlags, "DDPF_STENCILBUFFER, ");
  510.  
  511.     if( dwFlags & DDPF_YUV     )
  512.         strcat( pszFlags, "DDPF_YUV, ");
  513.  
  514.     if( dwFlags & DDPF_ZBUFFER     )
  515.         strcat( pszFlags, "DDPF_ZBUFFER, ");
  516.  
  517.     if( dwFlags & DDPF_ZPIXELS     )
  518.         strcat( pszFlags, "DDPF_ZPIXELS, ");
  519.  
  520.     strcat( pszFlags, "\n");
  521. }
  522.  
  523.  
  524. /*****************************Private*Routine******************************\
  525. * VerifyVMR
  526. *
  527. \**************************************************************************/
  528. BOOL VerifyVMR(void)
  529. {
  530.     HRESULT hres;
  531.  
  532.     CoInitialize(NULL);
  533.  
  534.     // Verify that the VMR exists on this system
  535.     IBaseFilter* pBF = NULL;
  536.     hres = CoCreateInstance(CLSID_VideoMixingRenderer,
  537.         NULL,
  538.         CLSCTX_INPROC,
  539.         IID_IBaseFilter,
  540.         (LPVOID *)&pBF);
  541.     if(SUCCEEDED(hres))
  542.     {
  543.         pBF->Release();
  544.         CoUninitialize();
  545.         return TRUE;
  546.     }
  547.     else
  548.     {
  549.         MessageBox(hwndApp, 
  550.             TEXT("This application requires the Video Mixing Renderer, which is present\r\n")
  551.             TEXT("only on Windows XP.\r\n\r\n")
  552.             TEXT("The Video Mixing Renderer (VMR) is also not enabled when viewing a \r\n")
  553.             TEXT("remote Windows XP machine through a Remote Desktop session.\r\n")
  554.             TEXT("You can run VMR-enabled applications only on your local machine.")
  555.             TEXT("\r\n\r\nThis sample will now exit."),
  556.             TEXT("Video Mixing Renderer capabilities are required"), MB_OK);
  557.  
  558.         CoUninitialize();
  559.         return FALSE;
  560.     }
  561. }
  562.